#include "Mutex.hpp"

int ticket = 1000;
Mutex global_mutex;
void* rountine(void* args)
{
    char* td = static_cast<char*>(args);
   
    while(1)
    {
        MutexGuard lock(global_mutex);
        if(ticket > 0)
        {
            usleep(1000);
            printf("%s: ticket:%d\n",td,ticket);
            ticket--;
        }
        else
        {
            break;
        }
    }
    return NULL;
}
int main()
{
    pthread_t t1,t2,t3,t4;
    
    pthread_create(&t1,NULL,rountine,(void*)"thread-1");
    pthread_create(&t2,NULL,rountine,(void*)"thread-2");
    pthread_create(&t3,NULL,rountine,(void*)"thread-3");
    pthread_create(&t4,NULL,rountine,(void*)"thread-4");

    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    pthread_join(t3, NULL);
    pthread_join(t4, NULL);
    return 0;
}